package com.briup.common.constant;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

/**
 * 系统常量类，用于维护系统中使用的一些常量值，如角色id、状态码等
 */
public class SystemConstant {

    // 默认密码
    public static final String DEFAULT_PASSWORD = "123456";
    public static final String ADMIN_ROLE_NAME = "system_admin";
    public static final String LAB_ADMIN_ROLE_NAME = "labs_admin";
    public static final String LAB_PERSONNEL_ROLE_NAME = "lab_personnel";

    // 审核消息的模板
    public static final String APPROVAL_MESSAGE_SUCCESS_TEMPLATE = "您的预约在时间段【%s】使用实验室【%s】已被审核通过，" +
                                                                   "审核人为：%s，审核时间为：%s";
    public static final String APPROVAL_MESSAGE_FAILURE_TEMPLATE = "您的预约在时间段【%s】使用实验室【%s】已被审核拒绝，" +
                                                                   "审核人为：%s，拒绝原因：%s，审核时间为：%s";

    // 验证码过期时间（分钟）
    public final static int CAPTCHA_EXPIRE_MINUTES = 5;

    /**
     * 角色常量类，用于维护系统中使用的角色id，如系统管理员、实验室管理员、实验人员等
     */
    @Getter
    @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
    public static enum RoleConstant {
        ADMIN(1, "SYSTEM_ADMIN"),
        LAB_ADMIN(2, "LABS_ADMIN"),
        LAB_PERSONNEL(3, "LAB_PERSONNEL");

        private final int roleId;
        private final String roleName;
    }

    /**
     * 状态常量类，用于维护系统中使用的状态码，如正常、禁用等
     */
    @Getter
    @RequiredArgsConstructor
    public static enum StatusConstant {
        NORMAL(1, "正常"),
        DISABLE(0, "禁用");

        private final int statusId;
        private final String statusName;
    }


    @Getter
    @RequiredArgsConstructor
    public static enum MenuTypeConstant {
        DIR(0, "目录"),
        MENU(1, "菜单"),
        BUTTON(2, "按钮");

        private final int menuTypeId;
        private final String menuTypeName;
    }

    // 审核状态常量类，用于维护系统中使用的审核状态码，如待审核、审核通过、审核拒绝等
    @Getter
    @RequiredArgsConstructor(access = AccessLevel.PRIVATE)
    public static enum ApprovalStatusConstant {
        PENDING(0, "待审核"),
        APPROVED(1, "审核通过"),
        REJECTED(2, "审核拒绝");

        private final int status;
        private final String statusName;
    }
}
